﻿Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient

Public Class DAOProducto
    '///////////////////////////BUSCAR////////////////////

    Public Function DAOcargarTextBoxProducto() As SqlDataReader

        Dim con As String = ConfigurationManager.ConnectionStrings("Conex").ConnectionString
        Dim cn As New SqlConnection(con)

        Dim sql As String = "select p.ID_PRODUCTO, p.NOMBRE,um.ID_UNIDAD_MEDIDA, um.NOMBRE 'UNIDAD MEDIDA'"
        sql += " from T_PRODUCTOS p join T_UNIDADES_MEDIDA um on p.ID_UNIDAD_MEDIDA=um.ID_UNIDAD_MEDIDA"

        cn.Open()
        Dim cmd As New SqlCommand()

        cmd.Connection = cn
        cmd.CommandText = sql
        cmd.CommandType = CommandType.Text

        Dim dr As SqlDataReader = cmd.ExecuteReader()
        'no cerrar la conexión al hacer el autocompletar
        Return dr
    End Function


    Public Function buscarProductoXNombre(ByVal nombre As String) As Data.DataTable 'metodo para filtrar localidades por el nombre
        Dim tabla As New Data.DataTable
        Dim con As String = ConfigurationManager.ConnectionStrings("Conex").ConnectionString
        Dim cn As New SqlConnection(con)
        Dim sql As String = ""

        Try
            cn.Open()

            If nombre = "" Then 'pregunto si nombre viene vacio, es xq busco todos las localidades cargados
                sql = " SELECT  P.ID_PRODUCTO,P.CODIGO CODIGO_PRODUCTO,P.NOMBRE NOMBRE_PRODUCTO,UM.ID_UNIDAD_MEDIDA,UM.NOMBRE NOMBRE_UNIDAD_MEDIDA,R.ID_RUBRO,R.NOMBRE NOMBRE_RUBRO"
                sql += " FROM	T_PRODUCTOS P,T_UNIDADES_MEDIDA UM,T_RUBROS R WHERE P.ID_UNIDAD_MEDIDA = UM.ID_UNIDAD_MEDIDA AND P.ID_RUBRO = R.ID_RUBRO"
                Dim cmd As New SqlCommand()

                cmd.Connection = cn
                cmd.CommandText = sql
                cmd.CommandType = CommandType.Text
                tabla.Load(cmd.ExecuteReader())

            Else
                sql = " SELECT  P.ID_PRODUCTO,P.CODIGO CODIGO_PRODUCTO,P.NOMBRE NOMBRE_PRODUCTO,UM.ID_UNIDAD_MEDIDA,UM.NOMBRE NOMBRE_UNIDAD_MEDIDA,R.ID_RUBRO,R.NOMBRE NOMBRE_RUBRO"
                sql += " FROM	T_PRODUCTOS P,T_UNIDADES_MEDIDA UM,T_RUBROS R WHERE P.ID_UNIDAD_MEDIDA = UM.ID_UNIDAD_MEDIDA AND P.ID_RUBRO = R.ID_RUBRO"
                sql += " AND (P.NOMBRE LIKE '%'+@PRODUCTO+'%')"
                Dim cmd As New SqlCommand()

                cmd.Parameters.AddWithValue("@PRODUCTO", nombre)
                cmd.Connection = cn
                cmd.CommandText = sql
                cmd.CommandType = CommandType.Text
                tabla.Load(cmd.ExecuteReader())
              
            End If

        Catch ex As Exception
        Finally
            cn.Close()
        End Try
        Return tabla
    End Function

    Public Function buscarProductoXCodigo(ByVal codigo As String) As Data.DataTable 'metodo para filtrar localidades por el nombre
        Dim tabla As New Data.DataTable
        Dim con As String = ConfigurationManager.ConnectionStrings("Conex").ConnectionString
        Dim cn As New SqlConnection(con)
        Dim sql As String = ""

        Try
            cn.Open()

            If codigo = "" Then 'pregunto si nombre viene vacio, es xq busco todos las localidades cargados
                sql = " SELECT  P.ID_PRODUCTO,P.CODIGO CODIGO_PRODUCTO,P.NOMBRE NOMBRE_PRODUCTO,UM.ID_UNIDAD_MEDIDA,UM.NOMBRE NOMBRE_UNIDAD_MEDIDA,R.ID_RUBRO,R.NOMBRE NOMBRE_RUBRO"
                sql += " FROM	T_PRODUCTOS P,T_UNIDADES_MEDIDA UM,T_RUBROS R WHERE P.ID_UNIDAD_MEDIDA = UM.ID_UNIDAD_MEDIDA AND P.ID_RUBRO = R.ID_RUBRO"
                Dim cmd As New SqlCommand()

                cmd.Connection = cn
                cmd.CommandText = sql
                cmd.CommandType = CommandType.Text
                tabla.Load(cmd.ExecuteReader())

            Else
                sql = " SELECT  P.ID_PRODUCTO,P.CODIGO CODIGO_PRODUCTO,P.NOMBRE NOMBRE_PRODUCTO,UM.ID_UNIDAD_MEDIDA,UM.NOMBRE NOMBRE_UNIDAD_MEDIDA,R.ID_RUBRO,R.NOMBRE NOMBRE_RUBRO"
                sql += " FROM	T_PRODUCTOS P,T_UNIDADES_MEDIDA UM,T_RUBROS R WHERE P.ID_UNIDAD_MEDIDA = UM.ID_UNIDAD_MEDIDA AND P.ID_RUBRO = R.ID_RUBRO"
                sql += " AND (P.CODIGO LIKE '%'+@PRODUCTO+'%')"
                Dim cmd As New SqlCommand()

                cmd.Parameters.AddWithValue("@PRODUCTO", codigo)
                cmd.Connection = cn
                cmd.CommandText = sql
                cmd.CommandType = CommandType.Text
                tabla.Load(cmd.ExecuteReader())

            End If

        Catch ex As Exception
        Finally
            cn.Close()
        End Try
        Return tabla
    End Function

    Public Function buscarProductoPK(ByVal pk As Integer) As NegProducto

        Dim conta As New NegProducto
        Dim tabla As New Data.DataTable
        Dim con As String = ConfigurationManager.ConnectionStrings("Conex").ConnectionString
        Dim cn As New SqlConnection(con)

        Try
            cn.Open()
            Dim sql As New SqlCommand("productos_BUSCARPORPK", cn)
            sql.CommandType = CommandType.StoredProcedure


            sql.Parameters.Add("@ID_PRODUCTO", SqlDbType.Int)
            sql.Parameters("@ID_PRODUCTO").Value = pk

            Dim dr As SqlDataReader = sql.ExecuteReader()
            While dr.Read()
                conta.cantStock = (dr("STOCK_PRODUCTO")).ToString()
                conta.ptoRepo = (dr("PUNTO_REP_PRODUCTO")).ToString()
                conta.precio = (dr("PRECIO_PRODUCTO")).ToString()
                'conta.descrip = (dr("OBSERVACIONES")).ToString() FALTA QUE LA BD LO TRAIGA
            End While
        Catch
        Finally
            cn.Close()
        End Try

        Return conta
    End Function

    '///////////////////MODIFICAR//////////////////

    Public Function ActualizarProducto(ByVal id As String, ByRef prod As NegProducto) As Boolean
        Dim con As String = ConfigurationManager.ConnectionStrings("Conex").ConnectionString
        Dim cn As New SqlConnection(con)
        Try
            cn.Open()
            Dim sql As New SqlCommand("productos_EDITAR", cn)
            sql.CommandType = CommandType.StoredProcedure

            sql.Parameters.Add("@ID_PRODUCTO", SqlDbType.Int)
            sql.Parameters("@ID_PRODUCTO").Value = id

            sql.Parameters.Add("@NOMBRE", SqlDbType.NVarChar)
            sql.Parameters("@NOMBRE").Value = prod.nombre

            sql.Parameters.Add("@CODIGO", SqlDbType.NVarChar)
            sql.Parameters("@CODIGO").Value = prod.codigo

            If prod.descrip = "" Then
                sql.Parameters.Add("@DESCRIPCION", SqlDbType.NVarChar)
                sql.Parameters("@DESCRIPCION").Value = DBNull.Value
            Else
                sql.Parameters.Add("@DESCRIPCION", SqlDbType.NVarChar)
                sql.Parameters("@DESCRIPCION").Value = prod.descrip
            End If

            sql.Parameters.Add("@ID_RUBRO", SqlDbType.Int)
            sql.Parameters("@ID_RUBRO").Value = prod.idRubro

            sql.Parameters.Add("@ID_UNIDAD_MEDIDA", SqlDbType.Int)
            sql.Parameters("@ID_UNIDAD_MEDIDA").Value = prod.idUnidMed

            If prod.precio = "" Then
                sql.Parameters.Add("@PRECIO", SqlDbType.Decimal)
                sql.Parameters("@PRECIO").Value = DBNull.Value
            Else
                sql.Parameters.Add("@PRECIO", SqlDbType.Decimal)
                sql.Parameters("@PRECIO").Value = prod.precio
            End If

            If prod.cantStock = "" Then
                sql.Parameters.Add("@CANTIDAD_STOCK", SqlDbType.Decimal)
                sql.Parameters("@CANTIDAD_STOCK").Value = DBNull.Value
            Else
                sql.Parameters.Add("@CANTIDAD_STOCK", SqlDbType.Decimal)
                sql.Parameters("@CANTIDAD_STOCK").Value = prod.cantStock
            End If

            If prod.ptoRepo = "" Then
                sql.Parameters.Add("@PUNTO_REPOSICION", SqlDbType.Decimal)
                sql.Parameters("@PUNTO_REPOSICION").Value = DBNull.Value
            Else
                sql.Parameters.Add("@PUNTO_REPOSICION", SqlDbType.Decimal)
                sql.Parameters("@PUNTO_REPOSICION").Value = prod.ptoRepo
            End If
            sql.ExecuteNonQuery()
            Return True

        Catch ex As Exception
            Return False
        Finally
            cn.Close()

        End Try
    End Function

    '////////////////////////////GUARDAR////////////////////////
    Public Function DAOInsertarProductos(ByVal prod As NegProducto) As Boolean
        Dim con As String = ConfigurationManager.ConnectionStrings("Conex").ConnectionString
        Dim cn As New SqlConnection(con)
        Dim band As Boolean = False
        'bandera para ver si la transaccion termina bien o no
        Try
            cn.Open()
            Dim sql As New SqlCommand("productos_INSERTAR", cn)
            'primero el nombre del sp y despues la conexion
            sql.CommandType = CommandType.StoredProcedure

            sql.Parameters.Add("@NOMBRE", SqlDbType.NVarChar)
            sql.Parameters("@NOMBRE").Value = prod.nombre

            sql.Parameters.Add("@CODIGO", SqlDbType.NVarChar)
            sql.Parameters("@CODIGO").Value = prod.codigo

            If prod.descrip = "" Then
                sql.Parameters.Add("@DESCRIPCION", SqlDbType.NVarChar)
                sql.Parameters("@DESCRIPCION").Value = DBNull.Value
            Else
                sql.Parameters.Add("@DESCRIPCION", SqlDbType.NVarChar)
                sql.Parameters("@DESCRIPCION").Value = prod.descrip
            End If

            sql.Parameters.Add("@ID_RUBRO", SqlDbType.Int)
            sql.Parameters("@ID_RUBRO").Value = prod.idRubro

            sql.Parameters.Add("@ID_UNIDAD_MEDIDA", SqlDbType.Int)
            sql.Parameters("@ID_UNIDAD_MEDIDA").Value = prod.idUnidMed

            If prod.precio = "" Then
                sql.Parameters.Add("@PRECIO", SqlDbType.Decimal)
                sql.Parameters("@PRECIO").Value = DBNull.Value
            Else
                sql.Parameters.Add("@PRECIO", SqlDbType.Decimal)
                sql.Parameters("@PRECIO").Value = prod.precio
            End If

            If prod.cantStock = "" Then
                sql.Parameters.Add("@CANTIDAD_STOCK", SqlDbType.Decimal)
                sql.Parameters("@CANTIDAD_STOCK").Value = DBNull.Value
            Else
                sql.Parameters.Add("@CANTIDAD_STOCK", SqlDbType.Decimal)
                sql.Parameters("@CANTIDAD_STOCK").Value = prod.cantStock
            End If

            If prod.ptoRepo = "" Then
                sql.Parameters.Add("@PUNTO_REPOSICION", SqlDbType.Decimal)
                sql.Parameters("@PUNTO_REPOSICION").Value = DBNull.Value
            Else
                sql.Parameters.Add("@PUNTO_REPOSICION", SqlDbType.Decimal)
                sql.Parameters("@PUNTO_REPOSICION").Value = prod.ptoRepo
            End If
           
            sql.ExecuteNonQuery()

            band = True
        Catch e As Exception
            band = False
        Finally
            cn.Close()
        End Try
        Return band
    End Function

    

    '////////////////////////////////CARGAR GRILLA////////////////////////////
    Public Function cargarGrillaProductos() As Data.DataTable
        Dim tabla As New Data.DataTable
        Dim con As String = ConfigurationManager.ConnectionStrings("Conex").ConnectionString
        Dim cn As New SqlConnection(con)

        Try
            cn.Open()
            Dim sql1 As New SqlCommand("productos_BUSCAR", cn)
            sql1.CommandType = CommandType.StoredProcedure

            sql1.Parameters.Add("@PRODUCTO", SqlDbType.NVarChar)
            sql1.Parameters("@PRODUCTO").Value = DBNull.Value

            sql1.Parameters.Add("@RUBRO", SqlDbType.NVarChar)
            sql1.Parameters("@RUBRO").Value = DBNull.Value

            sql1.Parameters.Add("@COD_PRODUCTO", SqlDbType.NChar)
            sql1.Parameters("@COD_PRODUCTO").Value = DBNull.Value

            tabla.Load(sql1.ExecuteReader())
        Catch ex As Exception
        Finally
            cn.Close()
        End Try

        Return tabla
    End Function

End Class
